<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Chapter 14. キャッシュ</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.75.1">
<link rel="home" href="index.html" title="Smarty マニュアル">
<link rel="up" href="smarty.for.programmers.html" title="Part III. プログラマのための Smarty">
<link rel="prev" href="api.unregister.resource.html" title="unregister_resource()">
<link rel="next" href="caching.multiple.caches.html" title="ページごとに複数のキャッシュ">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">Chapter 14. キャッシュ</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="api.unregister.resource.html">Prev</a> </td>
<th width="60%" align="center">Part III. プログラマのための Smarty</th>
<td width="20%" align="right"> <a accesskey="n" href="caching.multiple.caches.html">Next</a>
</td>
</tr>
</table>
<hr>
</div>
<div class="chapter" title="Chapter 14. キャッシュ">
<div class="titlepage"><div><div><h2 class="title">
<a name="caching"></a>Chapter 14. キャッシュ</h2></div></div></div>
<div class="toc">
<p><b>Table of Contents</b></p>
<dl>
<dt><span class="sect1"><a href="caching.html#caching.setting.up">キャッシュのセットアップ</a></span></dt>
<dt><span class="sect1"><a href="caching.multiple.caches.html">ページごとに複数のキャッシュ</a></span></dt>
<dt><span class="sect1"><a href="caching.groups.html">キャッシュのグループ</a></span></dt>
<dt><span class="sect1"><a href="caching.cacheable.html">キャッシュ可能なプラグインの出力の制御</a></span></dt>
</dl>
</div>
<p>
   キャッシュは出力内容をファイルに保存する事によって、
   <a class="link" href="api.display.html" title="display()"><code class="varname">display()</code></a>
   又は
   <a class="link" href="api.fetch.html" title="fetch()"><code class="varname">fetch()</code></a>
   を呼び出す速度を向上させるために使用されます。キャッシュが有効の場合、
   出力を再生成せずに表示されます。特に処理時間が長いテンプレートは、
   キャッシュを使用する事で大きく速度が上昇するでしょう。
   キャッシュされるのは
   <a class="link" href="api.display.html" title="display()"><code class="varname">display()</code></a>
   又は
   <a class="link" href="api.fetch.html" title="fetch()"><code class="varname">fetch()</code></a>
   の出力結果なので、１つのキャッシュファイルが複数のテンプレートファイルや
   設定ファイル等で構成されていることもあります。
   </p>
<p>
   テンプレートが動的コンテンツの場合、何をどれくらいの期間キャッシュするのか注意が必要です。
   例えば、Webサイトの一面にそれほど変更されないコンテンツが表示されている場合は、
   一時間かそれ以上、このページをキャッシュしても問題なく動作するでしょう。
   一方、一分経過するごとに新しい情報が格納される天気図をページに表示する場合は、
   このページをキャッシュする事は意味をなさないでしょう。
   </p>
<div class="sect1" title="キャッシュのセットアップ">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="caching.setting.up"></a>キャッシュのセットアップ</h2></div></div></div>
<p>
    まずはじめにキャッシュを有効にします。これは、<a class="link" href="variable.caching.html" title="$caching">
    <em class="parameter"><code>$caching</code></em></a><code class="literal"> = 1 (あるいは 2)</code>
    を設定するだけです。
   </p>
<div class="example">
<a name="id2850308"></a><p class="title"><b>Example 14.1. キャッシュを有効にする</b></p>
<div class="example-contents"><pre class="programlisting">

&lt;?php
require('Smarty.class.php');
$smarty = new Smarty;

$smarty-&gt;caching = 1;

$smarty-&gt;display('index.tpl');
?&gt;

    </pre></div>
</div>
<br class="example-break"><p>
    いつものようにテンプレートから出力内容をパースするために
    <code class="literal">display('index.tpl')</code> を呼び出しますが、
    キャッシュを有効にした事でその出力内容をコピーしたファイルが
    <a class="link" href="variable.cache.dir.html" title="$cache_dir"><em class="parameter"><code>$cache_dir</code></em></a>
    内に保存されます。次回 <code class="literal">display('index.tpl')</code>
    が呼ばれる際には、再びテンプレートをパースする代わりにキャッシュされたコピーが使用されます。
   </p>
<div class="note" title="テクニカルノート" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">テクニカルノート</h3>
<p>
     <a class="link" href="variable.cache.dir.html" title="$cache_dir"><em class="parameter"><code>$cache_dir</code></em></a>
     内のファイルにはテンプレート名に類似した名前が付けられます。
     拡張子は <code class="filename">.php</code> ですが、実際にはPHPスクリプトとして実行されません。
     これらのファイルは編集しないで下さい！
    </p>
</div>
<p>
    各々のキャッシュされたページは、
    <a class="link" href="variable.cache.lifetime.html" title="$cache_lifetime"><em class="parameter"><code>$cache_lifetime</code></em></a>
    生存時間が限られています。デフォルト値は 3600 秒です。
    期限が過ぎた後、キャッシュは再生成されます。
    <a class="link" href="variable.caching.html" title="$caching"><em class="parameter"><code>$caching</code></em></a><code class="literal">=2</code>
    を設定する事によって、個々のキャッシュに自分自身の生存時間を与える事が可能です。詳細は、
    <a class="link" href="variable.cache.lifetime.html" title="$cache_lifetime"><em class="parameter"><code>$cache_lifetime</code></em></a>
    を参照して下さい
   </p>
<div class="example">
<a name="id2851068"></a><p class="title"><b>Example 14.2. キャッシュごとに生存時間を設定する</b></p>
<div class="example-contents"><pre class="programlisting">

&lt;?php
require('Smarty.class.php');
$smarty = new Smarty;

$smarty-&gt;caching = 2; // 生存時間はキャッシュごと

// index.tplに5分のcache_lifetimeをセットします
$smarty-&gt;cache_lifetime = 300;
$smarty-&gt;display('index.tpl');

// home.tplに1時間のcache_lifetimeをセットします
$smarty-&gt;cache_lifetime = 3600;
$smarty-&gt;display('home.tpl');

// 注: $caching = 2の時、次のような$cache_lifetimeの設定は動作しません。
// home.tplのキャッシュの生存時間は既に1時間にセットされているので、
// もはや、$cache_lifetimeの値が尊重される事はありません。
// home.tplのキャッシュは、今までどおり1時間後に満期になるでしょう。
$smarty-&gt;cache_lifetime = 30; // 30 seconds
$smarty-&gt;display('home.tpl');
?&gt;

    </pre></div>
</div>
<br class="example-break"><p>
    <a class="link" href="variable.compile.check.html" title="$compile_check">
    <em class="parameter"><code>$compile_check</code></em></a> が有効の時、
    キャッシュファイルに入り組んだすべてのテンプレートファイルと設定ファイルは
    修正されたかどうかをチェックされます。
    もしキャッシュが生成されてからいくつかのファイルが修正されていた場合、
    キャッシュは即座に再生成されます。
    これは最適なパフォーマンスのためには僅かなオーバーヘッドになるので、
    <a class="link" href="variable.compile.check.html" title="$compile_check"><em class="parameter"><code>$compile_check</code></em>
    </a> は <code class="constant">FALSE</code> にして下さい。
   </p>
<div class="example">
<a name="id2851152"></a><p class="title"><b>Example 14.3. $compile_check を有効にする</b></p>
<div class="example-contents"><pre class="programlisting">

&lt;?php
require('Smarty.class.php');
$smarty = new Smarty;

$smarty-&gt;caching = 1;
$smarty-&gt;compile_check = true;

$smarty-&gt;display('index.tpl');
?&gt;

    </pre></div>
</div>
<br class="example-break"><p>
    <a class="link" href="variable.force.compile.html" title="$force_compile">
    <em class="parameter"><code>$force_compile</code></em></a> が有効の場合、
    キャッシュファイルは常に再生成されます。これは事実上、キャッシュ機能を無効にします。通常、
    <a class="link" href="variable.force.compile.html" title="$force_compile"><em class="parameter"><code>$force_compile</code></em>
    </a> は <a class="link" href="chapter.debugging.console.html" title="Chapter 10. デバッギングコンソール">デバッグ</a>
    目的でのみ使用し、キャッシュは
    <a class="link" href="variable.caching.html" title="$caching"><em class="parameter"><code>$caching</code></em>
    </a><code class="literal"> = 0</code>.
    にセットして無効にするのがさらに効率の良い方法です。
   </p>
<p>
    <a class="link" href="api.is.cached.html" title="is_cached()"><code class="varname">is_cached()</code></a>
    関数は、テンプレートが有効なキャッシュを持っているかどうかを調べるのに使われます。
    もしデータベースフェッチを必要とするようなテンプレートのキャッシュが存在する場合、
    フェッチ過程をスキップするためにこの関数を使う事が出来ます。
   </p>
<div class="example">
<a name="id2851255"></a><p class="title"><b>Example 14.4. is_cached() を使用する</b></p>
<div class="example-contents"><pre class="programlisting">

&lt;?php
require('Smarty.class.php');
$smarty = new Smarty;

$smarty-&gt;caching = 1;

if(!$smarty-&gt;is_cached('index.tpl')) {
    // キャッシュが有効でないので、ここで変数の割り当てを行います
    $contents = get_database_contents();
    $smarty-&gt;assign($contents);
}

$smarty-&gt;display('index.tpl');
?&gt;

    </pre></div>
</div>
<br class="example-break"><p>
    <a class="link" href="language.function.insert.html" title="{insert}"><code class="varname">{insert}</code></a>
    テンプレート関数によってページの一部を動的に保つ事が出来ます。
    例えば、すべてのページは右下に表示されるバナー以外はキャッシュが可能だとします。
    バナー部分には
    <a class="link" href="language.function.insert.html" title="{insert}"><code class="varname">{insert}</code></a>
    関数を使う事によって、キャッシュされたコンテンツの中に動的な要素を保つ事ができます。
    詳細な説明や例は、<a class="link" href="language.function.insert.html" title="{insert}"><code class="varname">{insert}</code></a>
    のドキュメントを参照してください。
   </p>
<p>
    <a class="link" href="api.clear.all.cache.html" title="clear_all_cache()"><code class="varname">clear_all_cache()</code></a>
    関数または <a class="link" href="api.clear.cache.html" title="clear_cache()"><code class="varname">clear_cache()</code></a>
    関数によって、個々のキャッシュファイル (<a class="link" href="caching.groups.html" title="キャッシュのグループ">そしてグループ</a>)
    をクリアする事ができます。
   </p>
<div class="example">
<a name="id2851356"></a><p class="title"><b>Example 14.5. キャッシュをクリアする</b></p>
<div class="example-contents"><pre class="programlisting">

&lt;?php
require('Smarty.class.php');
$smarty = new Smarty;

$smarty-&gt;caching = 1;

// 全てのキャッシュファイルをクリアします
$smarty-&gt;clear_cache('index.tpl');

// index.tplのキャッシュファイルのみクリアします
$smarty-&gt;clear_all_cache();

$smarty-&gt;display('index.tpl');
?&gt;

    </pre></div>
</div>
<br class="example-break">
</div>
</div>
<div class="navfooter">
<hr>
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="api.unregister.resource.html">Prev</a> </td>
<td width="20%" align="center"><a accesskey="u" href="smarty.for.programmers.html">Up</a></td>
<td width="40%" align="right"> <a accesskey="n" href="caching.multiple.caches.html">Next</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">unregister_resource() </td>
<td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td>
<td width="40%" align="right" valign="top"> ページごとに複数のキャッシュ</td>
</tr>
</table>
</div>
</body>
</html>
